﻿using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace ADV_Editor.SystemDialog {

    /// <summary>
    /// 新しいプロジェクト作成の為のフォーム
    /// </summary>
    public partial class NewProjectDialog : DialogBase {

        /// <summary>
        /// コンストラクタ
        /// </summary>
        public NewProjectDialog() {
            InitializeComponent();
            textBox_ProjectName.ShortcutsEnabled = false;
            textBox_ProjectPath.Text = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        }

        /// <summary>
        /// フォルダ選択ボタン
        /// </summary>
        private void button_FolderChoice_Click(object sender, EventArgs e) {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            dialog.RootFolder = Environment.SpecialFolder.Desktop;
            dialog.SelectedPath = textBox_ProjectPath.Text;
            dialog.Description = "プロジェクトを作成するフォルダを選択してください。";
            DialogResult result = dialog.ShowDialog();
            if (result == DialogResult.OK) {
                textBox_ProjectPath.Text = dialog.SelectedPath;
            }
        }

        /// <summary>
        /// プロジェクト名のテキストが変更されたとき
        /// </summary>
        private void textBox_ProjectName_TextChanged(object sender, EventArgs e) {
            // 未入力、若しくは使用不可文字が含まれるときは作成ボタンを押せなくする
            if (textBox_ProjectName.Text.Length == 0 || textBox_GameTitle.Text.Length == 0){
                button_OK.Enabled = false;
                return;
            }
            foreach(char c in Path.GetInvalidFileNameChars()){
                if(textBox_ProjectName.Text.IndexOf(c) >= 0){
                    button_OK.Enabled = false;
                    return;
                }
            }
            this.button_OK.Enabled = true;
        }

        /// <summary>
        /// プロジェクト名のテキストボックス上でキーが押されたとき
        /// </summary>
		/// [2008/06/19] Luice 修正
        private void textBox_ProjectName_KeyPress(object sender, KeyPressEventArgs e) {
            // バックスペースは許可
            if (e.KeyChar != '\b') {
                // 使用不可文字が含まれるときは文字入力を受け付けない
                foreach (char c in Path.GetInvalidFileNameChars()) {
                    if (e.KeyChar == c) {
                        e.Handled = true;
                        return;
                    }
                }
            }
            // ゲームタイトルと連動
            if (textBox_ProjectName.Text == textBox_GameTitle.Text) {
				// バックスペースなら1字取り除く
				if (e.KeyChar == '\b')
				{
					if (textBox_GameTitle.Text.Length > 0)
					{
						string str1 = textBox_GameTitle.Text.Substring(0, textBox_ProjectName.SelectionStart - 1);
						string str2 = textBox_GameTitle.Text.Substring(textBox_ProjectName.SelectionStart);
						textBox_GameTitle.Text = str1 + str2;
					}
					// それ以外は入力された文字を加える
				}
				else
				{
					textBox_GameTitle.Text = textBox_GameTitle.Text.Insert(textBox_ProjectName.SelectionStart, Convert.ToString(e.KeyChar));
				}
            }
        }

        /// <summary>
        /// プロジェクト名
        /// </summary>
        public string ProjectName { get { return textBox_ProjectName.Text; } }
        /// <summary>
        /// プロジェクトのパス
        /// </summary>
        public string ProjectPath { get { return textBox_ProjectPath.Text; } }
        /// <summary>
        /// ゲームタイトル
        /// </summary>
        public string GameTitle { get { return textBox_GameTitle.Text; } }


        #region ヘルプ
        /// <summary>
        /// OKボタンのヘルプ
        /// </summary>
        protected void button_OK_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "このダイアログを閉じて、コマンドを追加します。");
        }
        /// <summary>
        /// キャンセルボタンのヘルプ
        /// </summary>
        protected void button_Cancel_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "変更内容を保存せずにこのダイアログを閉じます。");
        }
        /// <summary>
        /// プロジェクト名 のヘルプ
        /// </summary>
        private void textBox_ProjectName_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "作成するプロジェクトの名前を入力します。");
        }
        /// <summary>
        /// ゲームタイトル のヘルプ
        /// </summary>
        private void textBox_GameTitle_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "ゲームの題名を指定します。\n既定ではプロジェクト名と同一になります。\nこの名前は後で変更することが出来ます。");
        }
        /// <summary>
        /// 場所 のヘルプ
        /// </summary>
        private void textBox_ProjectPath_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "プロジェクトを作るディレクトリを表示します。\n設定するには右隣のボタンを押します。");
        }
        /// <summary>
        /// 参照ボタン のヘルプ
        /// </summary>
        private void button_FolderChoice_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "プロジェクトを作るディレクトリを選択するためのダイアログを表示します。");
        }
        #endregion

    }
}